#include "bsp_pwm.h"

#ifndef __PUMP_H
#define __PUMP_H

typedef struct {
    PWM pump_pwm;

    _Bool is_on;  // 是否打开
} Pump;

// c++内容
#ifdef __cplusplus


#endif

// c语言内容
#ifdef __cplusplus
extern "C" {
#endif

/// @brief 泵的初始化函数
/// @param pump 泵的结构体指针
/// @param htim 定时器句柄
/// @param channel 通道号
void Pump_init(Pump *pump, TIM_HandleTypeDef *htim, uint32_t channel);

/// @brief 设置泵的开关状态
/// @param pump 泵的结构体指针
/// @param on 开关状态，1表示打开，0表示关闭
void Pump_set(Pump *pump, _Bool on);

/// @brief 切换泵的开关状态
/// @param pump 泵的结构体指针
void Pump_toggle(Pump *pump);

typedef struct {
    Pump *pumps;  // 泵的数组

    uint8_t pump_count;  // 泵的数量
} PumpGroup;

/// @brief 泵组的初始化函数
/// @attention
/// 请提前初始化每一个泵
/// @param pump_group 泵组的结构体指针
/// @param pump 泵的结构体指针数组
void PumpGroup_init(PumpGroup *pump_group, Pump *pumps[], uint8_t pump_count);

/// @brief 设置泵组中指定泵的开关状态
/// @param pump_group 泵组的结构体指针
/// @param pump_index 泵的索引
/// @param on 开关状态，1表示打开，0表示关闭
void PumpGroup_set(PumpGroup *pump_group, uint8_t pump_index, _Bool on);

/// @brief 设置泵组中所有泵的开关状态
/// @param pump_group 泵组的结构体指针
/// @param on 开关状态，1表示打开，0表示关闭
void PumpGroup_set_all(PumpGroup *pump_group, _Bool on);

/// @brief 切换泵组中指定泵的开关状态
/// @param pump_group 泵组的结构体指针
/// @param pump_index 泵的索引
void PumpGroup_toggle(PumpGroup *pump_group, uint8_t pump_index);

/// @brief 切换泵组中所有泵的开关状态
/// @param pump_group 泵组的结构体指针
void PumpGroup_toggle_all(PumpGroup *pump_group);


#ifdef __cplusplus
}
#endif

#endif